home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / postgresql_tempfile.nasl < prev    next >
Text File  |  2005-03-31  |  3KB  |  103 lines

  1. #
  2. #  This script was written by David Maciejak <david dot maciejak at kyxar dot fr>
  3. #  based on work from
  4. #  (C) Tenable Network Security
  5. #
  6. #  Ref: Trustix security engineers
  7. #
  8. #  This script is released under the GNU GPL v2
  9. #
  10.  
  11. if(description)
  12. {
  13.  
  14.  script_id(15417);  
  15.  script_bugtraq_id(11295);
  16.  script_version ("$Revision: 1.1 $");
  17.  
  18.  
  19.  name["english"] = "PostgreSQL insecure temporary file creation";
  20.  script_name(english:name["english"], francais:name["francais"]);
  21.  
  22.  desc["english"] = "
  23. The remote PostgreSQL server, according to its version number, is vulnerable 
  24. to an unspecified insecure temporary file creation flaw, which may allow 
  25. a local attacker to overwrite arbitrary files with the privileges of 
  26. the application.
  27.  
  28. Solution : Upgrade to newer version of this software
  29. Risk factor : Medium";
  30.  
  31.  
  32.  script_description(english:desc["english"]);
  33.  
  34.  summary["english"] = "Attempts to log into the remote PostgreSQL daemon";
  35.  script_summary(english:summary["english"]);
  36.  
  37.  script_category(ACT_GATHER_INFO);
  38.  
  39.  
  40.  script_copyright(english:"This script is Copyright (C) 2004 David Maciejak");
  41.  family["english"] = "Gain a shell remotely";
  42.  script_family(english:family["english"]);
  43.  script_dependencie("find_service.nes");
  44.  script_require_ports("Services/postgres", 5432);
  45.  exit(0);
  46. }
  47.  
  48.  
  49. port = get_kb_item("Services/postgres");
  50. if(!port)port = 5432;
  51.  
  52. if(!get_port_state(port))exit(0);
  53.  
  54. #
  55. # Request the database 'template1' as the user 'postgres' or 'pgsql'
  56. zero = raw_string(0x00);
  57.  
  58. user[0] = "postgres";
  59. user[1] = "pgsql";
  60.  
  61. for(i=0;i<2;i=i+1)
  62. {
  63.  soc = open_sock_tcp(port);
  64.  if(!soc)exit(0);
  65.  usr = user[i];
  66.  len = 224 - strlen(usr);
  67.  
  68.  req = raw_string(0x00, 0x00, 0x01, 0x28, 0x00, 0x02,
  69.                  0x00, 0x00, 0x74, 0x65, 0x6D, 0x70, 0x6C, 0x61,
  70.          0x74, 0x65, 0x31) + crap(data:zero, length:55) +
  71.         usr +
  72.        crap(data:zero, length:len);
  73.  
  74.  send(socket:soc, data:req);
  75.  r = recv(socket:soc, length:5);
  76.  r2 = recv(socket:soc, length:1024);
  77.  if((r[0]=="R") && (strlen(r2) == 10))
  78.   {
  79.     dbs = "";
  80.     req = raw_string(0x51) + "select version();" + 
  81.           raw_string(0x00);
  82.     send(socket:soc, data:req);
  83.     
  84.     r = recv(socket:soc, length:65535);
  85.     r = strstr(r, "PostgreSQL");
  86.     if(r != NULL)
  87.      {
  88.       for(i=0;i<strlen(r);i++)
  89.       {
  90.        if(ord(r[i]) == 0)
  91.          break;
  92.        }
  93.      r = substr(r, 0, i - 1);
  94.      if(ereg(string:r, pattern:"PostgreSQL ([0-6]\.|7\.(4\.[0-5])|([0-3]\..*)).*")){
  95.          security_warning(port);
  96.     exit(0);
  97.     }
  98.      }
  99.     exit(0);
  100.    }
  101. }
  102.